<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />        
        <link rel="stylesheet" type="text/css" href="../../css/guide.css" />        
        <script type="text/javascript">var basepath = '../../'; var lang = 'fr';</script>        
        <script type="text/javascript" src="../../js/loader.js"></script>        
    </head>
    <body>     
        <h1>Structure</h1>
        <p>
            Comme dans la grande majorité des frameworks, PHP Oxygen possède une structuration logique de ses dossiers. 
            Pour développer correctement une application, vous devez respecter cette structure même si celle-ci reste ouverte à des modifications.
        </p>
        
        <h2>Dossiers à la racine</h2>
        <table>
            <tr>
                <th>Chemin</th>
                <th>Constante</th>
                <th>Description</th>
            </tr>
            <tr>
                <td><strong>/</strong></td>
                <td>APP_DIR</td>
                <td>Dossier racine de l'application.</td>
            </tr>
            <tr>
                <td><strong>/model</strong></td>
                <td></td>
                <td>Dossier regroupant les classes ORM générées à partir de la structure de la base de données.</td>
            </tr>
            <tr>
                <td><strong>/module</strong></td>
                <td>MODULES_DIR</td>
                <td>
                    Dossier contenant les modules de votre application. Les modules présent dans ce dossier sont tous surchargeables dans le dossier webapp/module/module_name.<br />
                    C'est dans ce dossier que vous allez développer les fonctionnalités de votre application.
                </td>
            </tr>
            <tr>
                <td><strong>/oxygen</strong></td>
                <td>FW_DIR</td>
                <td>Dossier contenant les fichiers du framework.</td>
            </tr>
            <tr>
                <td><strong>/webapp</strong></td>
                <td>WEBAPP_DIR</td>
                <td>Ce dossier regroupe le(s) fichier(s) de configuration, le cache et les surcharges.</td>
            </tr>
            <tr>
                <td><strong>/www</strong></td>
                <td>WWW_DIR</td>
                <td>Le dossier public (ou dossier partagé en ligne), votre configuration doit pointer sur le fichier index.php de ce dossier.</td>
            </tr>
        </table>            
        
        <a name="module"></a>
        <h2>Dossier module</h2>
        <p>
            On retrouve dans ce dossier le/les module(s) utilisables dans votre projet. 
            Chaque module peut être composé de plusieurs dossiers qui permettront de trier vos scripts d'une façon logique. 
        </p>
        <blockquote class="warning">
            Le nommage du dossier est soumis à des règles car il compose une partie de l'uri. 
            Vous devez utiliser que des caractères alphanumériques en minuscule et sans accents pour respecter la convention de nommage.
        </blockquote>
        
        <table>
            <tr>
                <td>/module/module_name<strong>/action</strong></td>
                <td>Dossier regroupant les contrôleurs du module.</td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/assets</strong></td>
                <td>
                    Dossier contenant les fichiers accessibles en url directe.<br />
                    Exemple : si votre module est admin et que vous placez une image logo.jpg dans le dossier assets du module l'image s'affichera en saisissant l'url http://monhost/admin/logo.jpg
                </td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/config</strong></td>
                <td>Dossier contenant le/les fichier(s) de configuration du module comme le fichier contenant les routes.</td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/i18n</strong></td>
                <td>Dossier contenant les données de traduction, la plupart du temps ce dossier est créé automatiquement par la méthode translate de la <a href="../classes/i18n.html">classe i18n</a></td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/lib</strong></td>
                <td>Dossier contenant les classes de helpers et services du module.</td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/template</strong></td>
                <td>Dossier contenant les gabarits pour les rendus.</td>
            </tr>
            <tr>
                <td>/module/module_name<strong>/view</strong></td>
                <td>(optionnel) Dossier contenant les classes des vues pour les vues non génériques.</td>
            </tr>
        </table>
        
        <h2>Webapp</h2>
        <p>
            Le dossier webapp contient les fichiers de configuration du projet, les fichiers de cache, les surcharges des modules et les plugins smarty spécifiques au projet.
            La constante pour obtenir le chemin de la racine du dossier webapp est <strong>WEBAPP_DIR</strong>.
        </p>
        <table>
            <tr>
                <th>Chemin</th>
                <th>Constante</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>/webapp<strong>/cache</strong></td>
                <td>CACHE_DIR</td>
                <td>Contient les fichiers de cache et les scripts de compilation générés par la classe Template (Smarty).</td>
            </tr>
            <tr>
                <td>/webapp<strong>/config</strong></td>
                <td>CONFIG_DIR</td>
                <td>Contient le(s) fichier(s) de configuration du projet ainsi que la clé générée pour le cryptage des données.</td>
            </tr>
            <tr>
                <td>/webapp<strong>/logs</strong></td>
                <td>LOGS_DIR</td>
                <td>Dossier contenant les logs du projet, si le dossier n'existe pas il est automatiquement créé.</td>
            </tr>
        </table>
        <h3>Dossiers optionnels</h3>
        <table>
             <tr>
                <th>Chemin</th>
                <th>Constante</th>
                <th>Description</th>
            </tr>
            <tr>
                <td>/webapp<strong>/hooks</strong></td>
                <td>HOOKS_DIR</td>
                <td>Dossier de surcharge des classes du framework.</td>
            </tr>
            <tr>
                <td>/webapp<strong>/module</strong></td>
                <td>WEBAPP_MODULES_DIR</td>
                <td>Dossier de surcharge des modules.</td>
            </tr>
            <tr>
                <td>/webapp<strong>/smartyplugins</strong></td>
                <td></td>
                <td>Dossier pour les plugins Smarty additionnels et spécifiques au projet.</td>
            </tr>
        </table>
    </body>            
</html>